<?php

/**
 * opac actions.
 *
 * @package    sbweb3
 * @subpackage opac
 * @author     Pablo Andrés Díaz
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class opacActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    //$this->forward('default', 'module');
      $this->bibliotecas=BibliotecaTable::getInstance()->createQuery("b")->execute();
  }

  public function executeConsultar(sfWebRequest $request){
    $biblioteca=$request->getParameter('biblioteca');
    $palabras=$request->getParameter('palabras');
    $categoria=$request->getParameter('categoria');

    $pager=new sfDoctrinePager('Fichas',$request->getParameter('iDisplayLength',10));

    $pager->setQuery(FichasTable::getCatalogo($biblioteca, $palabras, $categoria));

    $pager->setPage($request->getParameter('iDisplayStart',0));
    $pager->init();

    return $this->renderText($this->fichasToJson($pager, $request));
    
  }

  public function executeMostrarEjemplares(sfWebRequest $request){
      $biblioteca=$request->getParameter('biblioteca');
      $fichas=$request->getParameter('fichas');

      $this->forward404Unless($biblioteca, "No se ha especificado la biblioteca");
      $this->forward404Unless($fichas, "No se han especificado las fichas a mostrar");

      $etiquetas=array();
      $ejemplares=array();

      foreach($fichas as $ficha){
          
          $etiquetas[$ficha]=EtiquetasMarcTable::getEtiquetasPorFicha($ficha);
          $ejemplares[$ficha]=EjemplaresTable::getInstance()->createQuery('ej')->where('ej.ficha = ?',$ficha)->execute();
      }

      $this->fichas=$fichas;
      $this->etiquetas=$etiquetas;
      $this->ejemplares=$ejemplares;

     
  }

  public function executeAgregarEjemplares(sfWebRequest $request){
    
    $ids=$request->getParameter("ejemplares_seleccionados");

    $ejemplares = $this->getUser()->getAttribute('ejemplares_reservados');

    foreach($ids AS $id)
    {
        $ejemplares[$id]=$id;
    }

    $this->getUser()->setAttribute('ejemplares_reservados', $ejemplares);

    return $this->renderText('Agregados a la canasta los ejemplares: '.join(',', $ejemplares));
  }

  public function executeVerEjemplaresReservados(sfWebRequest $request){
    $ejemplares_reservados = array();
    $fichas_ejemplares_reservados = array();
    $biblioteca=$request->getParameter('biblioteca');

    if($this->getUser()->hasAttribute('ejemplares_reservados'))
    {
        foreach($this->getUser()->getAttribute('ejemplares_reservados') AS $ejemplar=>$value)
            $ejemplares_reservados[$ejemplar]=EjemplaresTable::getInstance()->find($numero_adqui,$biblioteca);
    }

    $this->forward404If(count($ejemplares_reservados)==0);

    $this->ejemplares=$ejemplares_reservados;
    
  }

  public function executeReservarEjemplares(sfWebRequest $request){
      $this->enviarSolicitudReserva($request);
      $this->getUser()->getAttributeHolder()->clear();
      return $this->renderText("Se ha enviado un correo de solicitud de reserva");
  }

  public function executeRechazarEjemplar(sfWebRequest $request){
    $ejemplar_rechazado=$request->getParameter('ejemplar_rechazado');
    $ejemplares=$this->getUser()->getAttribute('ejemplares_reservados');

    unset($ejemplares[$ejemplar_rechazado]);

    $this->getUser()->setAttribute('ejemplares_reservados',$ejemplares);

    $ejs = array();

    foreach($ejemplares AS $ejemplar=>$value)
        $ejs[$ejemplar]=EjemplaresTable::getInstance()->find($ejemplar);


    return $this->renderPartial('opac/ejemplares_reservados',array('ejemplares'=>$ejs));
  }

  /* usuarios */

  public function executeVerDetallesUsuario(sfWebRequest $request){
     $this->usuario=UsuariosTable::getInstance()->find($request->getParameter('codigo_usuario'));
     $this->forward404Unless($this->usuario, "No existe el usuario solicitado");

     $this->multas=MultasTable::getInstance()->findByNoCuenta($this->usuario->getNocuenta());
     $this->prestamos=PrestamosTable::getInstance()->findByNoCuenta($this->usuario->getNocuenta());
  }

  public function executeVerificarExistenciaUsuario(sfWebRequest $request){
      $usuario=UsuariosTable::getInstance()->find($request->getParameter('codigo_usuario'));
      $this->forward404Unless($usuario, 'No existe el usuario solicitado');
      return $this->renderText($usuario->getNombre());
  }

  public function executeContactar(sfWebRequest $request){
      $this->form=new ContactoForm();
  }

  public function executeHelp(sfWebRequest $request){
      return $this->renderText('ayuda');
  }

  public function executeInfo(sfWebRequest $request){

  }

  public function executeNoticias(sfWebRequest $request){

  }

  /* correos */

  protected function enviarSolicitudReserva(sfWebRequest $request){
    $codigo=$request->getParameter('codigo_usuario_reserva');
    $nombre=$request->getParameter('nombre_usuario_reserva');
    $ejemplares=$request->getParameter('ejemplares_a_reservar');

    try {
        $this->getMailer()->send(new MensajeSolicitudReserva($codigo, $nombre, $ejemplares));
    }
    catch (Swift_SwiftException $se)
    {
        return $this->renderText("Error: no se pudo enviar el correo: $se");
    }
    catch(Swift_TransportException $te)
    {
        return $this->renderText("Error: no se pudo enviar el correo: $te");
    }

  }

  public function executeEnviarCorreoSugerencias(sfWebRequest $request){
    $mensaje=$request->getParameter('mensaje_usuario_contacto');
    $nombre=$request->getParameter('nombre_usuario_contacto');
    $correo=$request->getParameter('correo_usuario_contacto');
    $asunto=$request->getParameter('asunto_usuario_contacto');

    try {
        $this->getMailer()->send(new MensajeBuzonSugerencias($nombre, $correo, $asunto, $mensaje));
    }
    catch (Swift_SwiftException $se)
    {
        return $this->renderText("Error: no se pudo enviar el correo: $se");
    }
    catch(Swift_TransportException $te)
    {
        return $this->renderText("Error: no se pudo enviar el correo: $te");
    }

    return $this->renderText("El correo ha sido enviado exitosamente");

  }

  /**
   * convierte un arreglo de fichas en json
   * @param array $fichas
   * @return json
   */
  private function fichasToJson(sfDoctrinePager $pager, sfWebRequest $request){

      $output = array(
		"sEcho" => intval($request->getParameter('sEcho')),
		"iTotalRecords" => $pager->getNbResults(),
		"iTotalDisplayRecords" => 0,
		"aaData" => array()
	);

     foreach ( $pager->getResults(Doctrine_Core::HYDRATE_RECORD) as $key => $value )
            $output['aaData'][] = array(
                "DT_RowId"      =>$value['idficha'],
                "DT_RowClass"   =>"cursor",
                "titulo"        =>$value['titulo'],
                "autor"         =>$value['autor'],
                "clasificacion" =>$value['clasificacion'],
                "tipo_material" =>$value->getTipoMaterial()->getNombre()
             );

     return json_encode($output);
  }

  public function executeTest(sfWebRequest $request){
      return $this->renderText("hello world my dear");
  }
  
  

  

}
